package com.torry.edss.infras.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
 * @author torry.wang
 */
public class NumberUtils {
    public static String format(BigDecimal value, int scale) {
        if (value == null) {
            return "0.00";  // 处理 null 值
        }

        // 构建 DecimalFormat 模式
        StringBuilder pattern = new StringBuilder("#");
        if (scale > 0) {
            pattern.append(".");
            for (int i = 0; i < scale; i++) {
                pattern.append("0");
            }
        }

        DecimalFormat df = new DecimalFormat(pattern.toString());

        // 处理特殊值
        if (value.compareTo(BigDecimal.ZERO) == 0) {
            return df.format(BigDecimal.ZERO);
        }

        // 处理 0 < value < 1 或 -1 < value < 0 的情况
        if (value.compareTo(BigDecimal.ZERO) > 0 && value.compareTo(BigDecimal.ONE) < 0) {
            return "0" + df.format(value);
        }
        if (value.compareTo(BigDecimal.ZERO) < 0 && value.compareTo(BigDecimal.ONE.negate()) > 0) {
            return df.format(value);
        }

        // 默认情况
        return df.format(value);
    }


    public static String format(BigDecimal value) {
        DecimalFormat df = new DecimalFormat("#.00");
        if (value.compareTo(BigDecimal.ZERO) == 0) {
            return "0.00";
        }
        if (value.compareTo(BigDecimal.ZERO) > 0 && value.compareTo(new BigDecimal(1)) < 0) {
            return "0" + df.format(value);
        }
        if (value.compareTo(BigDecimal.ZERO) < 0 && value.compareTo(new BigDecimal(-1)) > 0) {
            df = new DecimalFormat("0.00");
            return df.format(value);
        }
        return df.format(value);
    }

    public static Double format(Double value) {
        return BigDecimal.valueOf(value).setScale(2, RoundingMode.HALF_UP).doubleValue();
    }

    public static BigDecimal formatBigDecimal(Double value) {
        return BigDecimal.valueOf(value).setScale(2, RoundingMode.HALF_UP);
    }
}
